package com.exm.collectcodenew.juc.unsafe;

import sun.misc.Unsafe;

public class TestUnsafe {
    //获取Unsafe 的实例（ 2 . 2 .1)
    //判断是不是Bootstrap 类加载器加载的localClass，在这里是看是不是Bootstrap 加载器加载了TestUnSafe.class . 很明显由于TestUnSafe.class 是使用AppClassLoader 加载的， 所以这里直接抛出了异常。
    static final Unsafe unsafe = Unsafe.getUnsafe();
    //记录变量state在类Te st UnSafe 中的偏移位（ 2 . 2 . 2)
    static final long stateOffset;
    //变量（ 2 . 2 . 3 )
    private volatile long state = 0;

    static {
            try {
                //获取state 变量在类TestUnSafe 中的偏移值（ 2 . 2 . 4)
                stateOffset = unsafe.objectFieldOffset(TestUnsafe.class.getDeclaredField("state"));
            } catch (Exception ex) {
                System.out.println(ex.getLocalizedMessage());
                throw new Error(ex);
            }
        }
            public static void main(String[] args){
                //创建实例，并且设置state 1直为1(2.2 . 5)
                TestUnsafe test = new TestUnsafe();
                //(2 . 2 . 6)
                Boolean sucess = unsafe.compareAndSwapInt(test, stateOffset, 0, 1);
                System.out.println(sucess) ;
            }
}